聽到 BERT,大家第一個聯想到的是什麼呢?
是他嗎??
還是這個
加上
這個?
答案應該比較接近後者 XD 沒錯,BERT 就是 Google 所開發的模型,全稱為 Bidirectional Encoder Representations from Transformers,為 NLP 預訓練的技術,且在許多 NLP 深度學習的領域大獲成功。接下來,就讓我們來好好了解 BERT 吧!
BERT 是一種基於變換器(transformers)的編碼器(encoder),它旨在通過上下文的各種調節,以非監督式的方式預先訓練未標記文字(僅使用純文字語料庫)的深度雙向標記法。這邊的雙向(bidirectional)和 BiLSTM 的雙向原理基本上一樣,就是同時由 input 的前至後與後至前進行編碼。而所謂的標記,就是將純文字轉換為電腦理解的字詞向量(word vector),成為詞嵌入(word embedding),把字詞所帶有之特徵(word vector)組合起來映射到不同維度的方式。
例如我們將每個字詞進行編碼產生 word vector:
那麽當他們組合成一句話時就會變成矩陣(matrix)
我要去台北 -->
[[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0]]
我要去台中 -->
[[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 1]]
而因為 BERT 在進行編碼標記時是考慮到雙向的,較不會產生同一個字,在不同語境(context)裡產生的歧異問題。例如維基百科中的例子:
其中,「水分」乍看之下是相同的詞,只是在不同的 context 裡面是不同的意思,這種時候不考慮上下文進行編碼的 word2vec 這種模型就完全無法分辨,兩個「水分」的 word vector 都一樣,會產生歧異。BERT 因為考慮上下文進行編碼,故植物之於「水分」和財務報表之於「水分」的 word vector 肯定不一樣,這樣一來就不容易產生歧異了。
在解決 NLP 任務,訓練模型時主要可以分為以下兩個步驟:
也就是 BERT 訓練的兩大步驟:Pre-training 與 Fine-Tuning
由上述內容可知,進行 Pre- training 時一定要有足夠的語料,模型的訓練才會足夠全面,而 context 對於 BERT 來說又是非常非常重要的判斷依據,故 BERT 模型都在非常大型的語料庫上預先訓練( Google 以 BooksCorpus 上 800M 個詞與英文維基百科 2500M 個詞進行 Pre-training)。很明顯,此訓練量像我們這種「一般人」根本不可能做得到。還好,Google 開源了多個版本多個語言的 pre-trained 模型給大家使用,所以現在這些模型我們都能在 Github 取得。而具體版本如下:
BERT-Large, Uncased(Whole Word Masking)
語言種類:英文
網路結構:24-layer,1024-hidden,16-heads
參數規模:340M
BERT-Large, Cased(Whole Word Masking)
語言種類:英文
網路結構:24-layer,1024-hidden,16-heads
參數規模:340M
BERT-Base, Uncased
語言種類:英文
網路結構:12-layer,768-hidden,12-heads
參數規模:110M
BERT-Large, Uncased
語言種類:英文
網路結構:24-layer,1024-hidden,16-heads
參數規模:340M
BERT-Base, Cased
語言種類:英文
網路結構:12-layer,768-hidden,12-heads
參數規模:110M
BERT-Large, Cased
語言種類:英文
網路結構:24-layer,1024-hidden,16-heads
參數規模:340M
BERT-Base, Multilingual Cased
語言種類:104種語言
網路結構:12-layer,768-hidden,12-heads
參數規模:110M
BERT-Base, Multilingual Uncased
語言種類:102種語言
網路結構:12-layer,768-hidden,12-heads
參數規模:110M
BERT-Base, Chinese
語言種類:中文
網路結構:12-layer,768-hidden,12-heads
參數規模:110M
上述版本可知,語言主要分為中文、英文和多語言。 其中英文和多語言版本還區分大小寫(cased:區分,uncased:不區分)。網路結構分為 Base 和 Large,主要從參數規模可以看出 Base 和 Large 的區別。Base 參數規模為110M,Large 則是 340M(詳細區別與架構如下圖所示)。 中文的預訓練模型只有一個版本,Base 版本的網路結構。
今天就先講解到這邊~明天再慢慢解釋 BERT 的 pre-training 流程,包括什麼是 mask、attention 等等,那麼,明天見!